package br.com.damazzy.manterPessoa {
	
	import br.com.damazzy.util.DateUtils;
	import br.com.damazzy.util.TratamentoErros;
	import br.com.damazzy.util.venda.PesquisaPessoas;
	import br.com.damazzy.vo.PessoaVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class PessoaEdicao extends PessoaEdicaoView {
		
		private var _vo: PessoaVO;
		private var _telaPai: PessoaSelecao;
		private var listaUfs: ArrayCollection;
		private var listaStatus: ArrayCollection;
		private var _retornarDadosCadastrados: Boolean;
		private var _telaPesquisaPessoas: PesquisaPessoas;
		public var telaCarregada: Boolean = false;
		public var _visualizarDados: Boolean = false;
		
		public function PessoaEdicao(vo: PessoaVO = null, retornarDadosCadastrados: Boolean = false, telaPesquisaPessoas: PesquisaPessoas = null) {
			super();
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
			
			_vo = vo;
			_retornarDadosCadastrados = retornarDadosCadastrados;
			_telaPesquisaPessoas = telaPesquisaPessoas;
		}
		
		private function init(event: FlexEvent): void {
		
			btnSalvar.addEventListener(MouseEvent.CLICK, salvar);
			btnFechar.addEventListener(MouseEvent.CLICK, fechar);
			
			this.addEventListener(CloseEvent.CLOSE, fechar);
			
			rm.obterDados.addEventListener(ResultEvent.RESULT, resultObterDados);
			rm.obterDados.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.incluir.addEventListener(ResultEvent.RESULT, resultIncluir);
			rm.incluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.alterar.addEventListener(ResultEvent.RESULT, resultAlterar);
			rm.alterar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
			
			rm.obterDados();
		}
		
		private function resultObterDados(result: ResultEvent): void {
			listaUfs = result.result.dados.listaUfs;
			
			var objUf: PessoaVO = new PessoaVO();
			objUf.codUf = "---";
			
			listaUfs.addItemAt(objUf, 0);
			
			cbxUf.dataProvider = listaUfs;
			
			criarComboStatus();
			telaCarregada = true;
			
			if (_vo != null) {
				this.alterar();
			} else {
				this.incluir();
			}
			
			visualizacaoDados();
		}
		
		private function criarComboStatus(): void {
			listaStatus = new ArrayCollection();
			
			var objStatus: PessoaVO = new PessoaVO();
			objStatus.status = "---";
			listaStatus.addItemAt(objStatus, 0);
			
			var objStatusAtivo: PessoaVO = new PessoaVO();
			objStatusAtivo.status = "ATIVO";
			objStatusAtivo.bolAtivo = "true";
			listaStatus.addItemAt(objStatusAtivo, 1);
			
			var objStatusInativo: PessoaVO = new PessoaVO();
			objStatusInativo.status = "INATIVO";
			objStatusInativo.bolAtivo = "false";
			listaStatus.addItemAt(objStatusInativo, 2);
			
			cbxStatus.dataProvider = listaStatus;
		}

		private function fechar(event: Event = null): void {
			
			if (_telaPesquisaPessoas != null) {
				
				if (_vo != null) {
					_telaPesquisaPessoas.selecionarNomePessoa(_vo.nome, _vo.idPessoa);
				}
				
			} else {
				_telaPai.pesquisar();
			}
			
			PopUpManager.removePopUp(this);
		}
		
		private function limparDados(): void {
			txtNome.text = "";
			txtEndereco.text = "";
			txtCep.text = "";
			txtTelefone.text = "";
			txtCidade.text = "";
			cbxUf.selectedIndex = 0;
			cbxStatus.selectedIndex = 0;
			rdTipoPessoa.selectedValue = "true";
			dtNascimento.selectedDate = null;
			txtEmail.text = "";
		}
		
		private function validarDadosObrigatorios(): Boolean {
			
			var msg: String = "O campo ";
			var validacaoOk: Boolean = true;
			
			if (txtNome.text == "") {
				msg += "Nome";
				validacaoOk = false;
				
			} else if (txtTelefone.text == "") {
				msg += "Telefone";
				validacaoOk = false;
				
			} else if (rdTipoPessoa.selectedValue == null) {
				msg += "Tipo de Pessoa";
				validacaoOk = false;
			}
			
			msg += " é de preenchimento obrigatório.";
			
			if (!validacaoOk) {
				Alert.show(msg, "Erro!");
			}
			
			return validacaoOk;
		}
		
		private function salvar(event: MouseEvent): void {
			
			if (validarDadosObrigatorios()) {
				
				var novaVO: PessoaVO = new PessoaVO();
				novaVO.nome = txtNome.actualText;
				novaVO.dataNascimento = dtNascimento.dataFormatada;
				novaVO.endereco = txtEndereco.actualText != "" ? txtEndereco.actualText : null;
				novaVO.cep = txtCep.actualText != "" ? txtCep.actualText : null;
				novaVO.telefone = txtTelefone.actualText;
				novaVO.cidade = txtCidade.actualText != "" ? txtCidade.actualText : null;
				novaVO.codUf = cbxUf.selectedItem.codUf != "---" ? cbxUf.selectedItem.codUf : null;
				novaVO.bolPessoaFisica = rdTipoPessoa.selectedValue.toString();
				novaVO.email = txtEmail.actualText != "" ? txtEmail.actualText : null;
				novaVO.bolAtivo = cbxStatus.selectedItem.bolAtivo;
				
				if (_vo != null && _vo.idPessoa != null && _vo.idPessoa != "") {
					novaVO.idPessoa = _vo.idPessoa;
					rm.alterar(novaVO);
				} else {
					rm.incluir(novaVO);
				}
			}
		}
		
		private function resultIncluir(event: ResultEvent): void {
 			_vo = event.result.dados.vo;
			
			if (_telaPesquisaPessoas != null) {
				Alert.show("Pessoa incluída com sucesso.", "Aviso!", 4, this, fechar);
			} else {
				Alert.show("Pessoa incluída com sucesso.", "Aviso!");
				limparDados();
			}
		}
		
		private function resultAlterar(result: ResultEvent): void {
			Alert.show("Pessoa alterada com sucesso.", "Aviso!");
			fechar();
		}
		
		private function incluir(): void {
			limparDados();
		}
		
		private function alterar(): void {
			
			txtNome.actualText = _vo.nome;
			dtNascimento.selectedDate = _vo.dataNascimento != null ? DateUtils.stringToDate(_vo.dataNascimento, "DD/MM/YYYY") : null;
			txtEndereco.actualText = _vo.endereco;
			txtCep.actualText = _vo.cep != null ? _vo.cep : "";
			txtTelefone.actualText = _vo.telefone;
			txtCidade.actualText = _vo.cidade;
			txtEmail.actualText = _vo.email;
			
			if (_vo.bolPessoaFisica == "true") {
				rdFisica.selected = true;
			} else {
				rdJuridica.selected = true;
			}
			
			selecionarOpcaoComboUf();
			selecionarOpcaoComboStatus();
		}
		
		private function visualizacaoDados(): void {
			
			if (_visualizarDados) {
				txtNome.editable = false;
				dtNascimento.enabled = false;
				txtEndereco.editable = false;
				txtCep.editable = false;
				txtTelefone.editable = false;
				txtCidade.editable = false;
				txtEmail.editable = false;
				rdTipoPessoa.enabled = false;
				cbxUf.enabled = false;
				cbxStatus.enabled = false;
				
				btnSalvar.visible = false;
			}
		}
		
		public function set telaPai(telaPai: PessoaSelecao): void {
			_telaPai = telaPai;
		}
		
		public function set visualizarDados(valor: Boolean): void {
			_visualizarDados = valor;
		}
		
		private function selecionarOpcaoComboUf(): void {
			
			for each (var obj: PessoaVO in cbxUf.dataProvider) {
				if (obj.codUf == _vo.codUf) {
					cbxUf.selectedItem = obj;
				}
			}
		}
		
		private function selecionarOpcaoComboStatus(): void {
			
			for each (var obj: PessoaVO in cbxStatus.dataProvider) {
				if (obj.bolAtivo == _vo.bolAtivo) {
					cbxStatus.selectedItem = obj;
				}
			}
		}
	}
}